<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div><h1 id="vim-">Vim文档编辑</h1>
<h2 id="labdoc-header-0">一、实验介绍</h2>
<h3 id="labdoc-header-1">1.1 实验内容</h3>
<p>上次实验带大家快速入门了Vim,本次实验将介绍更多文档编辑命令</p><h3 id="labdoc-header-2">1.2 实验知识点</h3>
<ul>
<li>Vim重复命令</li>
<li>跳转命令</li>
<li>复制粘贴</li>
</ul>
<h2 id="labdoc-header-3">二、实验步骤</h2>
<h3 id="labdoc-header-4">2.1 vim重复命令</h3>
<h4 id="-2-1-1-">　2.1.1 重复执行上次命令</h4>
<p>在普通模式下<code>.</code>(小数点)表示重复上一次的命令操作</p><p>拷贝测试文件到本地目录</p><pre><code class="hljs ruby"><span class="hljs-meta">$</span><span class="bash"> cp /etc/protocols .</span>
</code></pre><p>打开文件进行编辑</p><pre><code class="hljs ruby"><span class="hljs-meta">$</span><span class="bash"> vim protocols</span>
</code></pre><p>普通模式下输入<code>x</code>，删除第一个字符，输入<code>.</code>(小数点)会再次删除一个字符，除此之外也可以重复<code>dd</code>的删除操作</p><h4 id="2-1-2-">2.1.2 执行指定次数相同的命令</h4>
<p>进入普通模式输入<code>N&lt;command&gt;</code>，N表示重复后面的次数，下面来练习以下：</p><p>打开文件文件进行编辑</p><pre><code class="hljs ruby"><span class="hljs-meta">$</span><span class="bash"> vim protocols</span>
</code></pre><p>下面你可以依次进行如下操作练习：</p><ul>
<li>输入<code>10x</code>，删除10个连续字符</li>
<li>输入<code>3dd</code>，将会删除3行文本</li>
</ul>
<p>在普通模式下，你还可以使用<code>dw</code>或者<code>daw</code>(delete a word)删除一个单词，所以你可以很容易的联想到<code>dnw</code>(<strong>n替换为相应数字</strong>)表示删除n个单词</p><h3 id="labdoc-header-5">2.2 游标的快速跳转</h3>
<p>普通模式下，下列命令可以让光标快速调转到指定位置，我们分别讨论快速实现<strong>行间</strong>跳转和<strong>行内</strong>跳转</p><h4 id="2-2-1-">2.2.1 行间跳转</h4>
<table>
<thead>
<tr>
<th>命令</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>nG</code>(n Shift+g)</td>
<td>游标移动到第 n 行<strong>(如果默认没有显示行号，请先进入命令模式，输入<code>:set nu</code>以显示行号)</strong></td>
</tr>
<tr>
<td><code>gg</code></td>
<td>游标移动到到第一行</td>
</tr>
<tr>
<td><code>G</code>(Shift+g)</td>
<td>到最后一行</td>
</tr>
</tbody>
</table>
<p>还是来练习一下吧：</p><p>使用vim打开练习文档</p><pre><code class="hljs ruby"><span class="hljs-meta">$</span><span class="bash"> vim protocols</span>
</code></pre><p>依次进行如下操作练习：</p><ul>
<li>快速跳转到第9行，然后将其该行删除</li>
<li>回到第一行，向下删除8行</li>
<li>跳转到文档末，然后删除该行</li>
</ul>
<p><strong>小技巧：你在完成依次跳转后，可以使用<code>Ctrl+o</code>快速回到上一次(跳转前)光标所在位置</strong>,这个技巧很实用，比如当你在写代码时，忽然想起有个bug，需要修改，这时候你跳过去改好了，只需要按下<code>Ctrl+o</code>就可以回到你之前的位置。vim中会用很多类似的小技巧就等着你去发掘。</p><h4 id="2-2-2-">2.2.2 行内跳转</h4>
<p>普通模式下使用下列命令在行内按照单词为单位进行跳转</p><table>
<thead>
<tr>
<th>命令</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>w</code></td>
<td>到下一个单词的开头</td>
</tr>
<tr>
<td><code>e</code></td>
<td>到当前单词的结尾</td>
</tr>
<tr>
<td><code>b</code></td>
<td>到前一个单词的开头</td>
</tr>
<tr>
<td><code>ge</code></td>
<td>到前一个单词的结尾</td>
</tr>
<tr>
<td><code>0</code>或<code>^</code></td>
<td>到行头</td>
</tr>
<tr>
<td><code>$</code></td>
<td>到行尾</td>
</tr>
<tr>
<td><code>f&lt;字母&gt;</code></td>
<td>向后搜索&lt;字母&gt;并跳转到第一个匹配的位置(非常实用)</td>
</tr>
<tr>
<td><code>F&lt;字母&gt;</code></td>
<td>向前搜索&lt;字母&gt;并跳转到第一个匹配的位置</td>
</tr>
<tr>
<td><code>t&lt;字母&gt;</code></td>
<td>向后搜索&lt;字母&gt;并跳转到第一个匹配位置之前的一个字母(不常用)</td>
</tr>
<tr>
<td><code>T&lt;字母&gt;</code></td>
<td>向前搜索&lt;字母&gt;并跳转到第一个匹配位置之后的一个字母(不常用)</td>
</tr>
</tbody>
</table>
<p>依次进行如下操作练习：</p><ul>
<li>在普通模式下，任意跳转到一行，使用<code>w</code>跳转到一个单词的开头，然后使用<code>dw</code>删除这个单词</li>
<li>在普通模式下，使用<code>e</code>跳转到一个单词的结尾，并使用<code>~</code>将游标所在字母变成大写或小写</li>
</ul>
<p></p><h3 id="labdoc-header-6">2.3 复制粘贴和剪切</h3>
<h4 id="2-3-1-">2.3.1 复制及粘贴文本</h4>
<ul>
<li><p>普通模式中使用<code>y</code>复制</p><ul>
<li>普通模式中，<code>yy</code>复制游标所在的整行（<code>3yy</code>表示复制3行）</li>
<li>普通模式中，<code>y^</code> 复制至行首，或<code>y0</code>。不含光标所在处字符。</li>
<li>普通模式中，<code>y$</code> 复制至行尾。含光标所在处字符。</li>
<li>普通模式中，<code>yw</code> 复制一个单词。</li>
<li>普通模式中，<code>y2w</code> 复制两个单词。</li>
<li>普通模式中，<code>yG</code> 复制至文本末。</li>
<li>普通模式中，<code>y1G</code> 复制至文本开头。</li>
</ul>
</li>
<li><p>普通模式中使用<code>p</code>粘贴</p><ul>
<li>普通模式中，<code>p</code>(小写)代表粘贴至光标后（下）</li>
<li>普通模式中，<code>P</code>(大写)代表粘贴至光标前（上）</li>
</ul>
</li>
</ul>
<p>打开文件进入普通模式练习上述命令，这会儿你就可以随意<code>yy</code>了,一 一+</p><pre><code class="hljs ruby"><span class="hljs-meta">$</span><span class="bash"> vim protocols</span>
</code></pre><h4 id="2-3-2-">2.3.2 剪切及粘贴</h4>
<p>其实前面讲得<code>dd</code>删除命令就是剪切，你每次<code>dd</code>删除文档内容后，便可以使用<code>p</code>来粘贴，也这一点可以让我们实现一个很爽快的功能——交换上下行：</p><p><code>ddp</code>,就这么简单，即实现了快速交换光标所在行与它下面的行</p><p></p><h2 id="labdoc-header-7">三、实验总结</h2>
<p>这一小节你应该掌握了几个经常使用到的操作，包括快速行间移动和快速行内移动，以及剪切和复制粘贴等操作，希望你能够多加练习熟练掌握，一旦当你熟练了这些操作将会极大地提高你的工作效率。</p><h2 id="labdoc-header-8">四、思考练习</h2>
<p>我们前面学过的那些命令、操作，除了提到过的还有哪些支持前面加上数字实现重复多次操作，如<code>3dd</code></p></div>
</body>
</html>